/*******************************************************************************
* Copyright (c) 2010, 2014 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.ui.internal.menus;
import org.eclipse.e4.ui.internal.workbench.IDelegateInitializer;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.MApplicationElement;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.e4.compatibility.CompatibilityPart;
import org.eclipse.ui.menus.IWorkbenchContribution;
import org.eclipse.ui.services.IServiceLocator;
public class ExtensionContribution implements IDelegateInitializer {
@Override
public void initialize(MApplicationElement model, Object delegate) {
if (delegate instanceof IWorkbenchContribution) {
IServiceLocator locator = getServiceLocator((EObject) model);
if (locator != null) {
((IWorkbenchContribution) delegate).initialize(locator);
}
}
}
private IServiceLocator getServiceLocator(EObject object) {
if (object instanceof MPart) {
CompatibilityPart part = (CompatibilityPart) ((MPart) object).getObject();
return part.getReference().getSite();
} else if (object instanceof MWindow) {
IWorkbenchWindow workbenchWindow = ((MWindow) object).getContext().get(
IWorkbenchWindow.class);
if (workbenchWindow != null) {
return workbenchWindow;
}
} else if (object instanceof MApplication || object == null) {
return PlatformUI.getWorkbench();
}
return getServiceLocator(object.eContainer());
}
}